Veri Yapısı nedir
Veri yapıları, bilgisayarda depolanan ve işlenen verilerin belirli bir organizasyonunu ifade eder. Veri yapıları; veri elemanlarının depolanma, erişim, düzenlenme ve aranmasını etkili bir şekilde gerçekleştirmek için tasarlanmıştır.
Örneğin, bir dizi veri elemanı (örneğin, bir dizi sayı) bir veri yapısı olarak kabul edilebilir. Bu veri yapısı, her elemana erişmek için belirli bir sıra veya indeks kullanır ve bu elemanları farklı sıralama yöntemleri veya algoritmalar kullanarak düzenleyebilir.
— Veri Yapıları Uzmanı
Veri yapıları, veri işleme ve algoritmaların tasarımında önemli bir rol oynar. Doğru veri yapısı seçimi, veri işleme işlemlerinin daha hızlı ve verimli bir şekilde gerçekleştirilmesine olanak tanır. Veri yapıları ayrıca, çeşitli bilgi işlem problemlerinin çözümü için yaygın olarak kullanılan araçlardır.
Dizi Veri Yapısı
Dizi veri yapısı, belirli bir tip veri elemanının bir araya getirilmesiyle oluşturulan bir veri yapısıdır. Bu veri yapısı, bellekte bitişik bir blokta saklanır ve her eleman, dizi içindeki benzersiz bir konuma sahiptir.
Dizi Veri Yapısının Avantajları
- Veriler, sırayla depolandığı için, herhangi bir elemana erişim kolaydır.
- Diziler, belirli bir sırayla saklanan verileri düzenlemek için kullanılabilir.
- Dizi veri yapısı, bellek yönetiminde etkili bir şekilde kullanılabilir.
Dizi Veri Yapısının Dezavantajları
- Diziler, boyutları önceden belirlenmiş olduğundan, belirli bir boyutun ötesinde veri eklemek zordur.
- Diziler, elemanları aramak veya ekleme gibi bazı işlemler için yavaş olabilir.
- Bellek yönetiminde verimsiz olabilirler, çünkü sabit boyutlarından dolayı bazen bellek alanı atılabilir.
Diziler, bellek yönetimi ve basit veri organizasyonu için oldukça kullanışlıdır. Ancak, önceden belirlenmiş boyutlarından dolayı bazı durumlarda dikkatli kullanılmalıdır.
Örnek bir C kodu aşağıdaki şekildedir:
#include <stdio.h>
int main() {
int dizi[5] = {10, 20, 30, 40, 50}; //5 elemanlı bir tamsayı dizisi oluşturuyoruz
for(int i = 0; i < 5; i++) {
printf("dizi[%d] = %d\n", i, dizi[i]); //her bir elemanı ekrana yazdırıyoruz
}
return 0;
}
Dizi Tipleri
Dizi tipleri, bir dizi içindeki elemanların türünü belirten veri tipleridir. C programlama dili, birçok farklı türde dizi tanımlama imkanı sağlar. Bazı yaygın dizi tipleri şunlardır:
int
: Tamsayı değerleri için kullanılır.float
: Ondalık sayılar için kullanılır.double
: Çift hassasiyetli ondalık sayılar için kullanılır.char
: Karakterler için kullanılır.bool
: Mantıksal (true/false) değerler için kullanılır.
Dizi oluşturmak için, öncelikle dizi değişkeninin türünü ve boyutunu belirlemek gereklidir. Boyut, dizinin içinde kaç tane eleman olduğunu belirtir. Bir dizi, elemanlarını bellekte ardışık bir şekilde saklar ve her elemana erişmek için bir indeks kullanılır.
Dizi oluşturmak için, genel olarak şu sözdizimi kullanılır:
<veri_tipi> <dizi_adı>[<boyut>];
Örneğin, bir 10 elemanlı bir tamsayı dizisi oluşturmak için şöyle yazabiliriz:
int sayilar[10];
Bu, "sayilar" adında bir dizi tanımlar ve 10 tamsayı elemanına sahiptir. Diziye erişmek için, indeks numarası kullanarak şöyle yazabiliriz:
sayilar[0] = 5; //dizinin ilk elemanını 5 ile ayarla
sayilar[1] = 10; //dizinin ikinci elemanını 10 ile ayarla
int toplam = sayilar[0] + sayilar[1]; //dizinin ilk iki elemanının toplamını hesapla
Böylece, bir dizi oluşturmak ve elemanlarına erişmek oldukça basittir ve programcıların birçok veri elemanını kolayca saklamalarını ve işlemelerini sağlar.
Diziye Eleman Ekleme
C programlama dilinde, bir dizinin boyutu oluşturulduktan sonra değiştirilemez. Ancak, dizinin içine eleman ekleme işlemi yapılabilir. Bunun için, öncelikle dizinin sonraki boş indeksini takip etmek ve bu indekse yeni bir eleman eklemek gerekir. Bunu yapmak için bir sayacı veya göstericiyi kullanabilirsiniz.
Örneğin, aşağıdaki örnek kod parçası, bir dizinin sonuna yeni bir eleman eklemek için bir işlev tanımlar:
#include <stdio.h>
void diziyeElemanEkle(int dizi[], int eleman, int boyut) {
int i;
for(i = 0; i < boyut; i++) {
if(dizi[i] == '\0') { //boş bir indeks bulunursa
dizi[i] = eleman; //yeni elemanı ekle
break; //döngüyü sonlandır
}
}
}
int main() {
int dizi[5] = {10, 20, 30}; //3 elemanlı bir tamsayı dizisi oluşturduk
diziyeElemanEkle(dizi, 40, 5); //dizinin sonuna yeni eleman ekle
}
Rastgele Eleman Ekleme
- İlk olarak, rastgele sayı üretmek için
stdlib.h
kütüphanesinde yer alanrand()
fonksiyonunu kullanın. Bu fonksiyon, 0 veRAND_MAX
(genellikle 32767) arasında rastgele bir tamsayı döndürür. - Dizi boyutunu ve eklemek istediğiniz elemanın türünü belirleyin. Örneğin,
int
tipinde 10 elemanlı bir dizi oluşturmak istediğinizi varsayalım:
#define SIZE 10
int arr[SIZE];
- Diziye rastgele bir eleman eklemek için
rand()
fonksiyonunu kullanarak bir indeks belirleyin. Bu indeks, dizi boyutundan bir küçük olmalıdır çünkü dizinin indisleri 0'dan başlar. Örneğin:
int random_index = rand() % SIZE;
- Belirlenen rastgele indekse eleman ekleyin. Bu örnekte, rastgele bir tamsayı eklemek istediğimizi varsayalım:
int random_number = rand();
arr[random_index] = random_number;
- Tamamlanmış kod şu şekilde olabilir:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 10
int main() {
int arr[SIZE];
int random_index, random_number;
srand(time(NULL)); // rastgele sayılar için seed ayarla
// rastgele bir eleman ekle
random_index = rand() % SIZE;
random_number = rand();
arr[random_index] = random_number;
// dizi elemanlarını yazdır
for (int i = 0; i < SIZE; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
Bu örnekte srand()
fonksiyonu, rand()
fonksiyonunun rastgele sayılar üretmek için kullanacağı başlangıç seed'ini ayarlamak için kullanılır. Bu sayede her çalıştırıldığında farklı rastgele sayılar üretmek mümkündür.
Diziden Eleman Silme ve Kaydırma
C dilinde bir diziden eleman silmek ve diğer elemanları kaydırmak için şu adımları izleyebilirsiniz:
- İlk olarak, silmek istediğiniz elemanın indeksini belirleyin. Örneğin, 3. indeksteki elemanı silmek istediğinizi varsayalım.
int index_to_delete = 3;
- Dizi boyutunu bir değişkende saklayın.
int arr_size = 10;
- Silinecek elemanın son indeksindeki elemanı dizinin silinecek elemanın yerine taşıyın. Bu, dizinin son elemanını silmek için de çalışacaktır.
arr[index_to_delete] = arr[arr_size-1];
- Dizi boyutunu bir azaltın.
arr_size--;
- Döngü kullanarak, silinecek elemandan sonraki diğer elemanları bir önceki indekse kaydırın.
for (int i = index_to_delete; i < arr_size; i++) {
arr[i] = arr[i+1];
}
- Tamamlanmış kod şu şekilde olabilir:
#include <stdio.h>
int main() {
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int index_to_delete = 3;
int arr_size = 10;
// elemanı sil ve diğer elemanları kaydır
arr[index_to_delete] = arr[arr_size-1];
arr_size--;
for (int i = index_to_delete; i < arr_size; i++) {
arr[i] = arr[i+1];
}
// diziyi yazdır
for (int i = 0; i < arr_size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
Bu kod örneği diziyi oluşturur ve 3. indeksteki elemanı siler. Ancak gerçek bir senaryoda, kullanıcının silmek istediği elemanın indeksini belirlemesi için bir girdi mekanizması olacaktır. Ayrıca, dizinin büyük boyutlu olması durumunda bu yöntem bellek verimliliği açısından uygun olmayabilir.